package pl.koziolekweb.szkola.KZSerializacja;

// KZ-Serializacja/Osoba.java
 
public class Osoba implements java.io.Serializable {

    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String    imie;
    private int         ur;
    private Osoba[] dzieci;

    // konstruktory

    public Osoba(String imie, int ur, Osoba[] dzieci) {
        this.imie = imie;
        this.ur   =   ur;
        setDzieci(dzieci);
    }
    public Osoba(String imie, int ur) {
        this(imie,ur,null);
    }
    public Osoba() {
        this("",0,null);
    }

    // settery i gettery

    public void setImie(String imie) {
        this.imie = imie;
    }
    public String getImie() {
        return imie;
    }

    public void setUr(int ur) {
        this.ur = ur;
    }
    public int getUr() {
        return ur;
    }

    public void setDzieci(Osoba[] _dzieci) {
        if (_dzieci == null) {
            dzieci = null;
            return;
        }

        // "reczne" klonowanie tablic (rekurencyjne)
        dzieci = new Osoba[_dzieci.length];
        for (int i = 0; i < dzieci.length; ++i) {
            String imi = _dzieci[i].getImie();
            int    uro = _dzieci[i].getUr();
            dzieci[i] = new Osoba(imi,uro);
            dzieci[i].setDzieci(_dzieci[i].getDzieci());
        }
    }

    public Osoba[] getDzieci() {
        // tez powinnismy klonowac...
        return dzieci;
    }

    @Override
    public String toString() {
        // korzystamy z rekurencyjnej funkcji getOpis
        return getOpis("");
    }

    private String getOpis(String indent) {
        String nl = System.getProperty("line.separator");

        StringBuilder b = new StringBuilder(indent +
                             imie + " (" + ur + ")");

        if (dzieci != null ) {
            indent += "  ";
            for (int i =0; i < dzieci.length; ++i)
                b.append(nl)
                 .append(dzieci[i].getOpis(indent));
        }

        return b.toString();
    }
}
